package protect.week11;
import java.util.*;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/11/16 16:54
 * @package protect.week11
 * @description 2418. 按身高排序
 * 给你一个字符串数组 names ，和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。
 *
 * 对于每个下标 i，names[i] 和 heights[i] 表示第 i 个人的名字和身高。
 *
 * 请按身高 降序 顺序返回对应的名字数组 names 。
 *
 *
 *
 * 示例 1：
 *
 * 输入：names = ["Mary","John","Emma"], heights = [180,165,170]
 * 输出：["Mary","Emma","John"]
 * 解释：Mary 最高，接着是 Emma 和 John 。
 * 示例 2：
 *
 * 输入：names = ["Alice","Bob","Bob"], heights = [155,185,150]
 * 输出：["Bob","Alice","Bob"]
 * 解释：第一个 Bob 最高，然后是 Alice 和第二个 Bob 。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/sort-the-people
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 */

public class Ch03_SortPeople {
    public String[] sortPeople(String[] names, int[] heights) {
        Set<People> peoples = new TreeSet<>(new Comparator<People>() {
            @Override
            public int compare(People o1, People o2) {
                // 升序
//                return o1.height - o2.height;

                // 倒序
                return o2.height - o1.height;
            }
        });

        // 将学生的信息存入到 Set 中
        for (int i = 0; i < names.length; i++) {
            peoples.add(new People(names[i],heights[i]));
        }

        //  将所有学生的姓名取出并保存在数组中
        String[] sortNames = new String[names.length];
        Iterator<People> iterator = peoples.iterator();
        for (int i = 0; i < sortNames.length; i++) {
            sortNames[i] = iterator.next().name;
        }

        return sortNames;
    }

    public static void main(String[] args) {
        System.out.println(Arrays.toString(new Ch03_SortPeople().sortPeople(new String[]{"tom", "java"}, new int[]{134, 87})));
    }

}

class People {
    String name;
    int height;

    public People(String name, int height) {
        this.name = name;
        this.height = height;
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", height=" + height +
                '}';
    }
}
